package com.deng.eventflow.core;

/**
 * 指示可以复制对象的接口。
 *
 * 请注意，虽然复制看起来与克隆非常相似，但实际上是不同的。 复制的对象可能与原始对象的状态不同。
 * 对于始终具有不同数字 ID 的处理器对象尤其如此。
 * 此外，复制可能依赖于 Context 对象，这与 Java 的克隆含义不同。因此需要不同的接口。
 */
public interface Duplicable {

    /**
     * 复制一个对象并将其设置为其初始状态。
     * 这应该与调用 duplicate(false) 相同。
     * @return
     */
    Object duplicate();

    /**
     * 复制一个对象。
     * 或者，将对象设置为与源对象相同的状态。
     * @param with_state
     * @return
     */
    Object duplicate(boolean with_state);

}
